home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / T U R B O Language / Turbo Pascal V7.0 / BREAKOUT.ZIP / SCREEN.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-10-30  |  3.5 KB  |  205 lines

  1. {************************************************}
  2. {                                                }
  3. {   Breakout Demo Program                        }
  4. {   Copyright (c) 1992 by Borland International  }
  5. {                                                }
  6. {************************************************}
  7.  
  8. unit Screen;
  9.  
  10. {
  11.   See BREAKOUT.PAS.
  12.   This unit provides several objects for dealing with the screen.
  13. }
  14.  
  15. interface
  16.  
  17. uses Crt, Dos;
  18.  
  19. type
  20.   Location = object
  21.     X, Y : Integer;
  22.     Visible : Boolean;
  23.     constructor Init(InitX, InitY : Integer);
  24.     procedure Relocate(NewX, NewY : Integer);
  25.     procedure MoveTo(NewX, NewY : Integer); virtual;
  26.     procedure Show; virtual;
  27.     procedure Hide; virtual;
  28.     function GetX : Integer;
  29.     function GetY : Integer;
  30.     function IsVisible : Boolean;
  31.   end;
  32.  
  33.   Cursor = object(Location)
  34.     OldCursor : Integer;
  35.     TempCursor : Integer;
  36.     constructor Init;
  37.     procedure Show; virtual;
  38.     procedure Hide; virtual;
  39.     procedure SetCursor(NewCursor : Integer);
  40.     function GetCursor : Integer;
  41.     procedure MoveTo(NewX, NewY : Integer); virtual;
  42.     procedure Save;
  43.     procedure Restore;
  44.     procedure Speedup;
  45.     procedure Slowdown;
  46.   end;
  47.  
  48.   SaveScreen = object(Cursor)
  49.     OldAttr   : Byte;
  50.     constructor Init;
  51.     procedure Save;
  52.     procedure Restore;
  53.   end;
  54.  
  55. implementation
  56.  
  57. procedure SetCursorSpeed(NewSpeed : Word);
  58. begin
  59.   Port[$60] := $F3;
  60.   Delay(200);
  61.   Port[$60] := NewSpeed;
  62. end;
  63.  
  64. constructor Location.Init(InitX, InitY : Integer);
  65. begin
  66.   X := InitX;
  67.   Y := InitY;
  68.   Visible := False;
  69. end;
  70.  
  71. procedure Location.Relocate(NewX, NewY : Integer);
  72. begin
  73.   X := NewX;
  74.   Y := NewY;
  75. end;
  76.  
  77. procedure Location.MoveTo(NewX, NewY : Integer);
  78. var
  79.   Vis : Boolean;
  80. begin
  81.   Vis := Visible;
  82.   if Vis then Hide;
  83.   X := NewX;
  84.   Y := NewY;
  85.   if Vis then Show;
  86. end;
  87.  
  88. procedure Location.Show;
  89. begin
  90.   Visible := True;
  91. end;
  92.  
  93. procedure Location.Hide;
  94. begin
  95.   Visible := False;
  96. end;
  97.  
  98. function Location.GetX : Integer;
  99. begin
  100.   GetX := X;
  101. end;
  102.  
  103. function Location.GetY : Integer;
  104. begin
  105.   GetY := Y;
  106. end;
  107.  
  108. function Location.IsVisible;
  109. begin
  110.   IsVisible := Visible;
  111. end;
  112.  
  113. constructor Cursor.Init;
  114. begin
  115.   Location.Init(WhereX, WhereY);
  116.   OldCursor := GetCursor;
  117.   Location.Show;
  118. end;
  119.  
  120. procedure Cursor.Show;
  121. begin
  122.   SetCursor(TempCursor);
  123. end;
  124.  
  125. procedure Cursor.Hide;
  126. begin
  127.   TempCursor := GetCursor;
  128.   SetCursor($2000);
  129. end;
  130.  
  131. function Cursor.GetCursor : Integer;
  132. var
  133.   Reg : Registers;
  134. begin
  135.   with Reg do
  136.   begin
  137.     AH := 3;
  138.     BH := 0;
  139.     Intr($10, Reg);
  140.     GetCursor := CX;
  141.   end;
  142. end;
  143.  
  144. procedure Cursor.SetCursor(NewCursor : Integer);
  145. var
  146.   Reg : Registers;
  147. begin
  148.   with Reg do
  149.   begin
  150.     AH := 1;
  151.     BH := 0;
  152.     CX := NewCursor;
  153.     Intr($10, Reg);
  154.   end;
  155. end;
  156.  
  157. procedure Cursor.MoveTo(NewX, NewY : Integer);
  158. begin
  159.   Location.Relocate(NewX, NewY);
  160.   GoToXY(NewX, NewY);
  161. end;
  162.  
  163. procedure Cursor.Save;
  164. begin
  165.   Location.Relocate(WhereX, WhereY);
  166.   OldCursor := GetCursor;
  167. end;
  168.  
  169. procedure Cursor.Restore;
  170. begin
  171.   SetCursor(OldCursor);
  172.   GoToXY(X, Y);
  173. end;
  174.  
  175. procedure Cursor.Speedup;
  176. begin
  177.   SetCursorSpeed(0);
  178. end;
  179.  
  180. procedure Cursor.Slowdown;
  181. begin
  182.   SetCursorSpeed($2C);
  183. end;
  184.  
  185. constructor SaveScreen.Init;
  186. begin
  187.   Cursor.Init;
  188.   OldAttr := TextAttr;
  189. end;
  190.  
  191. procedure SaveScreen.Save;
  192. begin
  193.   Cursor.Save;
  194.   OldAttr := TextAttr;
  195. end;
  196.  
  197. procedure SaveScreen.Restore;
  198. begin
  199.   Cursor.Restore;
  200.   TextAttr := OldAttr;
  201.   ClrScr;
  202. end;
  203.  
  204. end.
  205.